package com.cj.service.impl;

import com.cj.po.Visitor;
import com.cj.po.PageInfo;
import com.cj.service.VisitorService;
import com.cj.dao.VisitorDao; // 引入 VisitorDao 以进行数据访问
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 访客服务实现类
 * 该类负责实现与访客相关的业务逻辑，并与数据访问层（VisitorDao）交互。
 */
@Service // 标记此类为 Spring 的服务组件，Spring 将自动扫描并创建该类的实例
public class VisitorServiceImpl implements VisitorService {

    @Autowired
    private VisitorDao visitorDao; // 自动注入 VisitorDao，以便进行数据库操作

    /**
     * 根据访客 ID 查找访客信息
     * @param v_id 访客ID
     * @return 返回对应的访客对象
     */
    @Override
    public Visitor findVisitorById(Integer v_id) {
        // 调用 DAO 方法查找访客
        return visitorDao.findVisitorById(v_id);
    }

    /**
     * 获取所有访客的列表
     * @return 返回所有访客的信息列表
     */
    @Override
    public List<Visitor> getAll() {
        // 获取所有访客信息
        return visitorDao.getAll();
    }

    /**
     * 根据访客姓名进行分页查询
     * @param v_name 访客姓名
     * @param pageIndex 当前页索引
     * @param pageSize 每页显示的记录数
     * @return 返回包含访客信息及分页数据的 PageInfo 对象
     */
    @Override
    public PageInfo<Visitor> findPageInfo(String v_name, Integer pageIndex, Integer pageSize) {
        // 计算符合条件的访客总数
        Integer totalCount = visitorDao.totalVisitorCount(v_name);

        // 创建 PageInfo 对象，存放分页信息
        PageInfo<Visitor> pageInfo = new PageInfo<>();
        pageInfo.setTotalCount(totalCount); // 设置总访客数量
        pageInfo.setPageIndex(pageIndex); // 设置当前页索引
        pageInfo.setPageSize(pageSize); // 设置每页显示的记录数

        // 获取当前页的访客列表并设置到 PageInfo 对象中
        pageInfo.setList(visitorDao.getVisitorList(v_name, (pageIndex - 1) * pageSize, pageSize));

        // 返回填充好的 PageInfo 对象
        return pageInfo;
    }

    /**
     * 添加访客信息
     * @param visitor 访客对象，包含要添加的信息
     * @return 返回添加结果的状态码，成功返回1，失败返回0
     */
    @Override
    public int addVisitor(Visitor visitor) {
        // 调用 DAO 方法以添加访客信息
        return visitorDao.addVisitor(visitor);
    }

    /**
     * 根据访客 ID 删除访客信息
     * @param v_id 访客ID
     * @return 返回删除结果的状态码，成功返回1，失败返回0
     */
    @Override
    public int deleteVisitor(Integer v_id) {
        // 调用 DAO 方法以删除指定 ID 的访客信息
        return visitorDao.deleteVisitor(v_id);
    }

    /**
     * 更新访客信息
     * @param visitor 访客对象，包含更新后的信息
     * @return 返回更新结果的状态码，成功返回1，失败返回0
     */
    @Override
    public int updateVisitor(Visitor visitor) {
        // 调用 DAO 方法以更新访客信息
        return visitorDao.updateVisitor(visitor);
    }

    /**
     * 获取所有访客信息
     * @return 返回所有访客的信息列表
     */
    @Override
    public List<Visitor> getAllVisitors() {
        // 调用 DAO 方法以获取所有访客信息
        return visitorDao.getAll();
    }
}
